import { buildIndex } from '@/utils/MapUtil'
/**
 * 通过父id来构建 element Ui 的树结构
 * @param data 要进行构建树的数据
 * @param option 指定数据的名字，父id，id的字段
 */
export function buildTreeByParentId (data, option = { parentId: 'parentId', name: 'name', id: 'id' }) {
  // {
  //     id: 1,
  //         label: '一级 1',
  //     children: [{
  //     id: 4,
  //     label: '二级 1-1',
  //     children: [{
  //         id: 9,
  //         label: '三级 1-1-1'
  //     }, {
  //         id: 10,
  //         label: '三级 1-1-2'
  //     }]
  // }]
  const idField = option.id
  const nameField = option.name
  const parentIdField = option.parentId
  // 根据id建立索引
  const indexMap = buildIndex(data, { indexCode: idField })
  console.log('=======开始====')
  const tree = []
  for (let i = 0; i < data.length; i++) {
    const item = data[i]
    const dataItem = indexMap.get(item[idField])
    if (!dataItem.$ref) {
      // 根据 数据对象 的id和名字 创建 树节点
      dataItem.$ref = { id: item[idField], label: item[nameField] }
    }
    // 获取父亲的id
    const parentId = item[parentIdField]
    if (parentId == null) {
      tree.push(dataItem.$ref)
    } else {
      // 获取父节点
      const parentItem = indexMap.get(parentId)
      let parentItemRef = parentItem.$ref
      if (!parentItemRef) {
        // 根据 数据对象 的id和名字 创建 树节点
        parentItem.$ref = { id: parentItem[idField], label: parentItem[nameField] }
        parentItemRef = parentItem.$ref
      }
      if (parentItemRef.children) {
        parentItemRef.children.push(dataItem.$ref)
      } else {
        parentItemRef.children = [dataItem.$ref]
      }
    }
  }
  return tree
}
